/*
题目描述：
如果三个正整数A、B、C ,A²+B²=C²则为勾股数
如果ABC之间两两互质，即A与B，A与C，B与C均互质没有公约数，
则称其为勾股数元组。
请求出给定n~m范围内所有的勾股数元组

输入描述
起始范围
1 < n < 10000
n < m < 10000

输出描述
ABC保证A<B<C
输出格式A B C
多组勾股数元组，按照A B C升序的排序方式输出。
若给定范围内，找不到勾股数元组时，输出Na。

示例一
输入

1
20

输出

3 4 5
5 12 13
8 15 17
示例二

输入

5
10

输出

Na
 */
const test = (input) => {
    let inputArr = input.split('\n').map(t => parseInt(t))
    // console.log(inputArr)
    let [n, m] = inputArr
    console.log(n, m)
    // 整数
    let isInt = (num) => {
        return Number.isInteger(num)
        // return num%1===0
        // return !/\./.test('' + num)
    }
    // 最大公约数
    const gcd = (a, b) => {
        if (a % b === 0) {
            return b;
        }
        return gcd(b, a % b)
    }
    // 互质 没有公约数 a<b
    let checkPrime = (a, b) => {
        return gcd(a, b) === 1
        // for (let i = 2; i <= a; i++) {
        //     if (a % i === 0 && b % i === 0) {
        //         return false
        //     }
        // }
        // return true
    }
    // 两两互质
    let doubleCheck = (a, b, c) => {
        // console.log(a, b, c, checkPrime(a, b))
        return checkPrime(a, b) && checkPrime(a, c) && checkPrime(b, c)
    }
    let stack = []
    for (let A = n; A < m; A++) {
        for (let B = A + 1; B < m; B++) {
            let C = Math.sqrt(A * A + B * B)
            if (C < m && isInt(C) && doubleCheck(A, B, C)) {
                stack.push({
                    A,
                    B,
                    C
                })
            }
        }
    }
    console.log(stack)
    let result = stack.length ? stack.map(t => `${t.A} ${t.B} ${t.C}`).join('\n') : 'Na'
    console.log(result)
}
test(`1
20`)

test(`5
10`)